package testJdk.generic;

/**
 * 泛型类：在类名后面加<T>
 * <p>
 * 一旦在类上指定了T,就可以在类的内部自由使用
 * 在实例化泛型类时，必须指定T的具体类型
 * 此处T可以随便写为任意标识，常见的如T、E、K、V等形式的参数常用于表示泛型
 */
public class Generic<T> {
    /**
     * 可以将key这个成员变量的类型指定为T,T的类型由外部指定
     */
    private T key;

    /**
     * 泛型构造方法形参key的类型也为T，T的类型由外部指定
     *
     * @param key:T类型的参数
     */
    public Generic(T key) {
        this.key = key;
    }


    /**
     * 泛型方法getKey的返回值类型为T，T的类型由外部指定
     *
     * @return T类型的对象
     */
    public T getKey() {
        return key;
    }

    public static void main(String[] args) {
        //1.泛型的类型参数,只能是类类型（包括自定义类），不能是简单类型
        //1.1传入的实参类型,需与和构造方法的泛型限定类型相同，即为Integer.
        Generic<Integer> genericInteger = new Generic<Integer>(123456);

        //1.2传入的实参类型,需与和构造方法的泛型限定类型相同，即为String.
        Generic<String> genericString = new Generic<String>("key_vlaue");
        System.out.println("泛型测试:key is " + genericInteger.getKey());
        System.out.println("泛型测试:key is " + genericString.getKey());
    }
}
